const express = require("express");
const router = express.Router();
const mysqlUtil = require('../utils/mysqlUtil');
const { userValidationRules } = require('../verify/user'); // 数据验证
const validate = require('../verify/checkValidationResult');

// 分页查询
router.get('/user/page', async (req, res) => {
    const page = parseInt(req.query.page) || 1;
    const pageSize = parseInt(req.query.pageSize) || 10;
    const offset = (page - 1) * pageSize;


    try {
        // 获取总记录数
        let totalResult = await mysqlUtil.query(`SELECT COUNT(*) AS total FROM users`);
        const total = totalResult[0].total;

        try {
            // 分页查询用户列表
            const result = await mysqlUtil.query(`SELECT * FROM users LIMIT ? OFFSET ?`, [pageSize, offset]);
            res.send({
                status: true,
                message: '查询成功',
                data: result,
                page: page,
                pageSize: pageSize,
                total: total
            });
        } catch (error) {
            res.status(500).cc(error);

        }
    } catch (error) {
        res.status(500).cc(error);
    }
});

//id查询用户信息
router.get('/user/:id', (req, res) => {
    const id = req.params.id;
    mysqlUtil.query(`SELECT * FROM users WHERE id = ${id}`)
        .then(user => {
            if (user.length === 0) {
                return res.status(404).cc('用户不存在');
            }
            res.send({
                status: true,
                message: '查询成功',
                data: user[0]
            });
        })
        .catch(error => {
            res.status(500).cc(error);
        })
});

//新增用户
router.post('/user', userValidationRules, validate, async (req, res) => {
    const { username } = req.body;
    try {
        // 检查用户名是否已存在
        const checkResult = await mysqlUtil.query(`SELECT * FROM users WHERE username = ?`, [username]);
        if (checkResult.length > 0) {
            return res.status(400).cc('用户名已存在');
        }

        // 插入新用户
        await mysqlUtil.query(`INSERT INTO users (username, password) VALUES (?, '123456')`, [username]);
        res.send({
            status: true,
            message: '新增成功'
        });
    } catch (error) {
        res.status(500).cc(error);
    }
});

//批量删除用户
router.delete('/user', async (req, res) => {
    const { ids } = req.body;

    // 检查 ids 是否存在且是一个数组
    if (!Array.isArray(ids) || ids.length === 0) {
        return res.status(400).cc('无效的 ID');
    }

    try {
        // 使用参数化查询来防止 SQL 注入
        const placeholders = ids.map(() => '?').join(', ');
        const result = await mysqlUtil.query(`DELETE FROM users WHERE id IN (${placeholders})`, ids);
        if (result.affectedRows <= 0) {
            return res.status(500).cc('删除数据不存在');
        }
        console.log(result);
        res.send({
            status: true,
            message: '删除成功',
            data: {
                affectedRows: result.affectedRows // 返回受影响的行数
            }
        });
    } catch (error) {
        res.status(500).cc(error);
    }
});


//修改用户
router.put('/user', async (req, res) => {
    const { id, username } = req.body;
    // 检查 id 是否存在
    if (!id) {
        return res.status(400).cc('用户 ID 不能为空');
    }
    // 构建更新字段
    const updateFields = [];
    const values = [];

    if (username !== undefined) {
        updateFields.push(`username = ?`);
        values.push(username);
    }

    // 如果没有要更新的字段，直接返回成功
    if (updateFields.length === 0) {
        return res.send({
            status: true,
            message: '修改成功'
        });
    }
    // 构建 SQL 查询
    const sql = `UPDATE users SET ${updateFields.join(', ')} WHERE id = ?`;
    values.push(id);

    try {
        await mysqlUtil.update(sql, values);
        res.send({
            status: true,
            message: '修改成功'
        });
    } catch (error) {
        res.status(500).cc(error);
    }
})

module.exports = router;